package com.eps.modelo.DAO.persitencia;

import java.io.Serializable;
import java.util.List;

import javax.annotation.Resource;
import javax.sql.DataSource;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.transform.Transformers;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import com.eps.modelo.DAO.interfaces.DAO;
import com.eps.modelo.DAO.interfaces.DaoTo;
import com.eps.modelo.TO.ClienteTO;
import com.eps.modelo.TO.UsuarioTO;
import com.eps.modelo.TO.ZonaTO;

@Repository
public class SpringHibernateDAO extends HibernateDaoSupport implements DAO,
		DaoTo {

	@Resource(name = "SQLDataSource")
	DataSource dsAdministracion;
	


	@Autowired
	public SpringHibernateDAO(SessionFactory sessionFactory) {
		super.setSessionFactory(sessionFactory);
		// TODO Auto-generated constructor stub
	}

	public void guardar(Object entidad) {
		// TODO Auto-generated method stub
		getHibernateTemplate().saveOrUpdate(entidad);
	}

	public void actualizar(Object entidad) {
		// TODO Auto-generated method stub
		getHibernateTemplate().merge(entidad);
	}

	public <T> List<T> buscar(Class<T> claseEntidad) {
		// TODO Auto-generated method stub
		final List<T> entities = getHibernateTemplate().loadAll(claseEntidad);
		return entities;

	}

	public <T> List<T> buscar(String hql) {
		// TODO Auto-generated method stub
		final List<T> entities = getHibernateTemplate().find(hql);
		return entities;

	}

	public void eliminar(Object entidad) {
		// TODO Auto-generated method stub
		getHibernateTemplate().delete(entidad);
	}

	public <T> T get(Class<T> entityClass, Serializable id) {
		// TODO Auto-generated method stub
		return null;
	}

	public void guardar(Object[] entidades) {
		// TODO Auto-generated method stub

	}

	public List<ZonaTO> getListaZonas() {
		Session session = getHibernateTemplate().getSessionFactory()
				.openSession();
		Query consulta = session
				.createSQLQuery(
						"SELECT convert(varchar(2),z.id_zona) as id_zona,z.nom_zona  FROM zona z ")
				.setResultTransformer(Transformers.aliasToBean(ZonaTO.class));
		return consulta.list();
		
	}
	
	
	

	public UsuarioTO getUsuario(String usuario) {
		Session session = getHibernateTemplate().getSessionFactory()
				.openSession();
		Query consulta = session
				.createSQLQuery(
						"select convert(varchar(8),id_usuario) as dni, nombre from usuario where id_usuario='"
								+ usuario + "'").setResultTransformer(
						Transformers.aliasToBean(UsuarioTO.class));
		return (UsuarioTO) consulta.list().get(0);
	}
	
	public UsuarioTO loguearUsuarioMovil(String usuario, String clave)  {
		Session session = getHibernateTemplate().getSessionFactory()
				.openSession();
		String sql = "select convert(varchar(8),dni) as dni, apellidos+nombres  as nombre from t_usuario where dni='"
			+ usuario + "' and clave='"+clave+"' and accesoMovil=1 and estado=1";
		Query consulta = session
				.createSQLQuery(sql).setResultTransformer(
						Transformers.aliasToBean(UsuarioTO.class));
		
		List lista = consulta.list();
		if(lista.size()==0)
			return null;
		else
			return (UsuarioTO) lista.get(0);
	}

		
		public ClienteTO getClientePorCodigo(String num_inscrip) {
			Session session = getHibernateTemplate().getSessionFactory()
					.openSession();
			Query consulta = session
					.createSQLQuery(
							"select convert(varchar(8),num_inscrip) as num_inscrip,nombre,direccion,nom_region as zona from sici.dbo.tb_cliente where num_inscrip='"
									+ num_inscrip + "'").setResultTransformer(
							Transformers.aliasToBean(ClienteTO.class));
			return (ClienteTO) consulta.list().get(0);
		}

	  
}
